1B11 2000

Mini-Project I


Deadline: The printed version of your work must be handed in to the departmental office by noon Friday 15th December 2000 (the last day of term). In addition, a version should be submitted electronically using the handin program (details will be emailed closer to the deadline). Note that the electronically submitted version of your program will be run through an automated plagiarism detector.

Aim: You are asked to write a program of greater complexity than those you have typically been writing to answer the Exercise questions. Your program should consist of a small number of classes (not just one), that properly declare instance variables, instance methods and constructors. Your program should run by creating objects and calling their methods, and objects calling each other's methods. The design of your program will require more thought and planning, as well as thinking in terms of classes and objects.

With the printed version of your program you must submit an UML class diagram, documenting the classes and their relationships within your program. A hand drawn diagram is entirely acceptable.

Make sure you read chapters 9 and 10 in the text book.

Marking: The work will be graded A-F.
On this scheme a grade C is considered to be basically satisfactory which means the program runs, does the more or less the right things and has a reasonable design using classes. Grades B and A represent better and excellent programs, while D and E are progressively less good programs that show serious problems in execution and/or design. Grade F means a failure to present anything of merit.

Getting a good grade: Marking will take into account the quality of the program you write. In particular pay attention to the following:

A clean simple working program, making good use of classes and objects, is considered better than a larger and more complex but less well-organised program.

Development Advice:

The Mini-Projects

Below are listed a number of mini-project ideas. You must select one and notify me by email which one you have chosen — do this by sending an email to G.Roberts@cs.ucl.ac.uk and in the subject line put: '1B11 MiniProject 1 Question <n>'. Replace the <n> with the number of the question you are doing!

The projects are rated using Easy, Medium and Hard.
An Easy project is easier to do but must be done well to get a higher grade.
A Medium project is more demanding, so producing a reasonable working solution is more likely to get a higher grade.
A Hard project is even more demanding, so working solutions will given appropriate credit.

The project descriptions are deliberately fairly open-ended, providing scope for the project idea to be extended if you feel able.

1. Write a bank program to manage a collection of bank accounts. It should allow the user open and close accounts, to enter credits and debits and keep a current balance. It will be interactive, of course. See whether you can get it to store records in files. What about setting up direct debits, interest payments and anything else you can think of?
Difficulty: Easy (see chapter 10 in the text book), so harder to get a high grade.

2. The owner of a snack bar wants a system which will allow a menu, with prices, to be built up, items added, deleted and prices adjusted. The system should also allow the owner to enter a customer's order and get a display of the bill, with the total price. Obviously the system will be interactive. It should be possible to store menus and bill information in files.
Difficulty: Easy

3. Write a program that might be used by a newsagent shop to store information about which papers are delivered to which customers on the paper routes organised by the newsagent. It should be possible to add and remove papers for a specific customer, and display the summary of papers needed for each paper route. The program should keep track of the amount of money owed by each customer and record payments made. Files should be used to store the program's data.
Difficulty: Easy

 

4. Write a drawing program to display mazes. A maze should have a single path through it or from middle to outside. Try displaying large mazes.
Difficulty: Medium

5. Write a program that will take a representation of a grid of dots, say 10 by 10, and decide which letter of the alphabet it represents (i.e., do pattern recognition). The pattern might have some distortion, interference and ambiguity, and the program should be able to deal with this.
Difficulty: Medium (needs creative thought)

6. "Eliza" is a famous program from the history of computing, which fooled people into believing that it understood natural language. The original system was intended to be a psychoanalyst which held conversations with a patient. Typical exchanges would be something like:
Eliza: Hello. Would you like to talk with me?
User: Yes.
E: How are you feeling today?
U: Not too good.
E: Why are you feeling not too good?
U: My father yelled at me yesterday.
E: Why did your father yell at you yesterday?
U: I made him angry.
E: Don't you like your father?
U: He makes me nervous.
E: Why does he make you nervous?
and so on.
All that the program is really doing is looking for key words (I, father, mother and so on) and also matching templates and converting them:me -> you, I -> you, you -> I or me, depending on object/subject of verb, my -> your, mine -> yours, ...ed (verb) -> Why did ... and so on. When no template matched the system just produced a random stock question or prompt. Develop a similar system. See how sophisticated you can make it by adding more complex templates. The hardest part will be identifying sentence structures. Verbs could be recognised stupidly (have a dictionary of common verbs with their forms) or more intelligently (parse simple sentences into noun phrases and verb phrases).
Difficulty: Medium

 

7. Write a program to play 3-dimensional noughts-and-crosses on a 4x4x4 board, with a human user. Your program should play a challenging game.
Difficulty: Hard.

8. A good spell-checker should be able to not only identify words that are incorrectly spelt, but also suggest corrected versions. Write a program which will take as input a word and will check whether it is correctly spelt and if not, what might be correct versions. You should concentrate on deciding what might be correct spellings, rather than on building up a huge dictionary, even though this will restrict the vocabulary that your program can recognise.
Difficulty: Hard.

9. Write an interactive calculator program that works entirely with Roman Numerals, including all the operations to do the arithmetic (i.e., do not convert roman numerals to decimal integers and back in order to do the arithmetic operations).
Difficulty: Hard